//
//  HHBaseViewController.swift
//  HHWeibo
//
//  Created by hehuafeng on 2017/2/14.
//  Copyright © 2017年 雷厉峰行. All rights reserved.
//

import UIKit

class HHBaseViewController: UIViewController {
    
    // MARK: - 属性
    /// 访客视图信息字典
    var visitorInfoDictionary : [String : String]?
    
    /// 导航栏
    lazy var navBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.cz_screenWidth(), height: 64))
    /// 导航条目
    lazy var navItem = UINavigationItem()
    
    /// 表格视图
    var tableView: UITableView?
    /// 刷新控件
    var refershControl: UIRefreshControl?
    
    /// 上拉标记
    var isPullup = false
    
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 1. 初始化UI
        setupUI()
        
        // 2. 取消自动缩进, 防止首页表格视图显示不正常
        automaticallyAdjustsScrollViewInsets = false
    }
    
    // MARK: 设置控制器标题
    override var title: String? {
        didSet {
            navItem.title = title
        }
    }
    
    private func setupUI() {
        // 1. 设置背景颜色
        view.backgroundColor = UIColor.white
        
        // 2. 设置导航栏
        setupNavigationBar()
        
        // 3. 初始化子视图
        HHNetworkManager.shared.userLogon ? setupTableView() : setupVisitorView()
    }
    
    func setupVisitorView() {
        // 1. 创建访客视图
        let visitorView = HHVisitorView(frame: view.bounds)
        
        // 2. 给访客视图传递信息字典
        visitorView.visitorInfo = visitorInfoDictionary
        
        // 3. 插入到控制器的view中
        view.insertSubview(visitorView, belowSubview: navBar)
        
        // 4. 监听访客视图按钮
        visitorView.registerButton.addTarget(self, action: #selector(registerClick), for: .touchUpInside)
        visitorView.loginButton.addTarget(self, action: #selector(loginClick), for: .touchUpInside)
        
        // 5. 设置访客视图导航栏左右按钮
        navItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(registerClick))
        navItem.rightBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(loginClick))
    }

    /// 设置导航栏
    func setupNavigationBar() {
        // 1. 添加自定义导航栏
        view.addSubview(navBar)
        
        // 2. 将navItem设置给navBar
        navBar.items = [navItem]
        
        // 3. 设置渲染颜色
        // 导航栏背景渲染颜色
        navBar.barTintColor = UIColor.cz_color(withHex: 0xF6F6F6)
        // 导航栏文字渲染颜色
        navBar.tintColor = UIColor.orange
    }
    
    /// 设置表格视图
    func setupTableView() {
        // 1. 创建表格视图
        tableView = UITableView(frame: view.bounds, style: .plain)
        
        // 2. 插入到navigationBar下面
        view.insertSubview(tableView!, belowSubview: navBar)
        
        // 3. 设置数据源和代理
        tableView?.dataSource = self
        tableView?.delegate = self
        
        // 设置tableView内边距, 不能在viewDidLoad方法中设置, 
        // 因为, 此时tableView还没有创建, 设置无效
        tableView?.contentInset = UIEdgeInsets(top: navBar.bounds.height, left: 0, bottom: tabBarController?.tabBar.bounds.height ?? 49, right: 0)
        
        // 4. 设置刷新控件
        refershControl = UIRefreshControl()
        if #available(iOS 10.0, *) {
            tableView?.refreshControl = refershControl
        } else {
            
        }
        // 刷新控件监听方法
        refershControl?.addTarget(self, action: #selector(loadData), for: .valueChanged)
    }
    
    /// 加载数据, 如果子类没有重新则结束刷新控件
    func loadData() {
        refershControl?.endRefreshing()
    }
}

// MARK: - 访客视图按钮监听方法
extension HHBaseViewController {
    
    /// 登录监听方法
    func loginClick() {
        // 1. 发送用户登录通知
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: WeiBoUserLoginShouldNotification), object: nil)
        
        print("登录按钮")
    }
    
    /// 注册监听方法
    func registerClick() {
        print("注册按钮")
    }
}

// MARK: - UITableViewDataSource, UITableViewDelegate
// 父类实现数据源、代理方法只是为了避免语法错误, 具体功能由子类实现
extension HHBaseViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        // 如果是最后一组的最后一个即将显示, 则上拉刷新加载新数据
        // 1. 获取最后一组
        let section = tableView.numberOfSections - 1
        let row = indexPath.row
        
        let count = tableView.numberOfRows(inSection: section)
        
        // 2. 容错处理
        if (section < 0) && (row < 0) {
            return
        }
        
        // FIXME: 此处逻辑千万不能错误
        // 3. 当显示的cell为最后一个、且没有上拉刷新时
        if indexPath.row == (count - 1) && !isPullup {
            // 纪录控件为上拉刷新状态
            isPullup = true
            
            // 加载数据
            loadData()
        }
        
    }
}
